package com.yunke.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yunke.entity.YunkeCommunityMember;
import com.yunke.entity.vo.YunkeCommunityMemberVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 社群成员 Mapper 接口
 * 
 * @author yunke
 * @since 1.0.0
 */
@Mapper
public interface YunkeCommunityMemberMapper extends BaseMapper<YunkeCommunityMember> {

    /**
     * 分页查询社群成员列表
     */
    Page<YunkeCommunityMemberVo> selectMemberPage(Page<YunkeCommunityMemberVo> page,
                                                  @Param("communityId") Long communityId,
                                                  @Param("memberRole") Integer memberRole,
                                                  @Param("keyword") String keyword);

    /**
     * 获取社群成员详情
     */
    YunkeCommunityMemberVo selectMemberDetail(@Param("communityId") Long communityId, @Param("userId") Long userId);

    /**
     * 检查用户是否为社群成员
     */
    YunkeCommunityMember selectMemberByUserIdAndCommunityId(@Param("userId") Long userId, @Param("communityId") Long communityId);

    /**
     * 获取社群管理员列表
     */
    List<YunkeCommunityMemberVo> selectAdminMembers(@Param("communityId") Long communityId);

    /**
     * 获取活跃成员列表
     */
    List<YunkeCommunityMemberVo> selectActiveMembers(@Param("communityId") Long communityId, @Param("limit") Integer limit);

    /**
     * 获取新成员列表
     */
    List<YunkeCommunityMemberVo> selectNewMembers(@Param("communityId") Long communityId, @Param("limit") Integer limit);

    /**
     * 获取用户在指定社群中的角色
     */
    Integer selectUserRoleInCommunity(@Param("userId") Long userId, @Param("communityId") Long communityId);

    /**
     * 更新成员最后活跃时间
     */
    int updateLastActiveTime(@Param("userId") Long userId, @Param("communityId") Long communityId);

    /**
     * 更新成员统计数据
     */
    int updateMemberStats(@Param("userId") Long userId,
                         @Param("communityId") Long communityId,
                         @Param("messageCount") Integer messageCount,
                         @Param("likeCount") Integer likeCount,
                         @Param("contributionValue") Integer contributionValue);

    /**
     * 批量更新成员状态
     */
    int batchUpdateMemberStatus(@Param("communityId") Long communityId,
                               @Param("userIds") List<Long> userIds,
                               @Param("memberStatus") Integer memberStatus);

    /**
     * 获取社群成员数量统计
     */
    Integer countCommunityMembers(@Param("communityId") Long communityId);

    /**
     * 获取用户加入的社群数量
     */
    Integer countUserJoinedCommunities(@Param("userId") Long userId);

    /**
     * 删除社群所有成员
     */
    int deleteAllMembersByCommunityId(@Param("communityId") Long communityId);
} 